2009年10月21日
川俣晶の縁側ソフトウェア技術雑記 total 24666 count

PowerShellはawkの健全な進化形として使用できるか?

Written By: 川俣 晶連絡先

 PowerShellで123ダー!を読んで、いきなり目から鱗が落ちました。

 そうか!

 こう書けばawkとPowerShellはよく似ているんだ!

awkの場合 §

S:\>type delme.txt|gawk "{print $0}; BEGIN { print 1 }; END { print 2 }"

1

abc

def

ghi

2

S:\>

PowerShellの場合 §

PS S:\> type delme.txt|foreach { $_ } -Begin { 1 } -End { 2 }

1

abc

def

ghi

2

PS S:\>

awkではなくPowerShellを使う長所 §

  • 進化が止まっていろいろ使い勝手に不都合のあるawkを使う苦痛から解放される
  • Windows 7には標準で入っていて、どの環境でもすぐ使える (この点は特に重要)
  • しかも統合開発環境であるISEまでWindows 7に入っている
  • 上記の例を見ると、全体の文字数がより少なくて済んでいる。パワーアップした代償により多くの文字を打たされる……というわけでは、必ずしもない
  • キーワードとしてのForEach-Objectは長いが、実はTabキーの補完が使えるし、aliasのforeachでも良いのでさほど負担にならない
  • もちろん、PowerShellの方がはるかに新しくパワーも大きい。awkや正規表現で上手く扱えないパターンでも、PowerShellではシンプルに扱えるケースも多い
  • シェルのスクリプトに誰も万能であることを求めないので、機能過多に進化して破綻するリスクが少ない (言語であるawkに万能を求めて手軽さを失ったのがPerlとも言える)

感想 §

 実は自分の中で1つの盲点があったことに気づきました。つまり、シェルの後継はシェル、言語の後継は言語という思いこみがありました。しかし、PowerShell自身が正規表現も扱える以上(たとえばwhere { $_ -match "[ad].." })、awk相当の機能はおおむねPowerShellで満たすことができることになります。これでもう、どれを選んでも何らかの問題があるLL言語の混迷とサヨナラして、awk後継言語の選定に終止符を打てます。

 更に言えば、乗り換える契機を見いだしにくかったcmd.exeからPowerShellに本格移行するタイミングが明確に見えた感じがあります。バッチの代わりにPowerShellで書くと思えばメリットが見いだしにくいわけですが、awkの代わりにPowerShellで書くと思えばメリットがはっきりと見えます。